//1.封装一个双端队列
//es6 类进行封装

/*
//类名首字母大写
class 类名{
    //构造方法
    constructor(){

    }
    //普通方法
    function fuc1(){}
    function fuc2(){}
}
*/

//创建一个对象
//属性 对象名称 = new 类名();

class Dequeue {
    constructor() {
        this.item = [];
    }
    addFront(data) {
        this.item.unshift(data);
    }
    addBack(data) {
        this.item.push(data);
    }

    //移除前端

    //方法名(el1,el2)

    //1.删除，不需要传入参数 空参
    //2.要返回被删除的数

    removeFront() {
        return this.item.shift();
    }
    removeBack() {
        return this.item.pop();
    }

    //返回前端元素
    peekFront() {
        return this.item[0]
    }
    peekBack() {
        return this.item[this.item.length - 1]
    }
    size() {
        // this.item 相当于arr arr.length
        return this.item.length;
    }
    toString() {
        return this.item.toString()

    }
    isEmpty() {
        // length为0，this.item.length===0成立，返回true；
        return this.item.length === 0;
        // or return this.size()
    }
}

//测试一下
// const dequ = new Dequeue();
// dequ.addFront(1);
// dequ.addFront(2);
// dequ.addFront(3);
// dequ.addBack(1);
// dequ.addBack(2);
// dequ.addBack(3);
// console.log(dequ.size());
// console.log(dequ.toString());
// console.log(dequ);

// 双端队列的应用
// 回文检测
// 应用双端队列前后都可以弹出的特点进行判断


// isEqual = true

// while (deque.size > 1 && isEmpty) {
//     if (前端字符 === 后端字符) { 循环 }
//     if (前端字符！ == 后端字符) {
//         return false
//     }
// }
function palindeomeChecker(aString) {
    // 1.考虑边界条件
    if (aString == null || aString != null && aString.length === 0) {
        return false;
    }
    // 2. 按照题目要求对传入的字符串进行预处理
    // split() 方法用于把一个字符串分割成字符串数组。
    // join()数组转字符串
    // toLocalLowerCase()返回值 一个新的字符串所有大写字符全部被转换为了小写字符。
    const lowerString = aString.toLocalLowerCase().split(" ").join(" ");

    //    3.将出任好的字符串存入双端队列中
    // 3.1创建双端队列的对象
    const deque = new Dequeue();
    // 用双层队列来实现算法
    // 3.2将字符串存入到双端队列
    // charAt() 方法可返回指定位置的字符。
    for (let i = 0; i < lowerString.length; i++) {
        deque.addBack(lowerString.charAt(i));
    }
    // 4.对回文进行判断
    let isEqual = true;
    let firsCase, lastCase;
    while (deque.size() > 1 && isEqual) {
        firsCase = deque.removeFront();
        firsCase = deque.removeBack();
        if (firsCase !== lastCase) {
            // return false;
            isEqual = false;
        }
    }
    return isEqual;
}
// 进行测试
let strs = ["aba", "A ba", "this is a test"];

let str;
for (let i = 0; i < strs.length; i++) {
    str = strs[i];
    console.log(str, palindeomeChecker(str));
}